const express = require('express');
const path = require('path');

const date_tool = require('./util/date_tool');

const login_router = require('./router/login');
const verifice_router = require('./router/verifice');
const create_router = require('./router/create');
const manager_router = require('./router/manager');

const checkCardkey = require('./middleware/checkCardkey');

let app = express();

// 输出所有请求的日志
app.use(function (req, res, next) {
    // 记录请求到达服务端的时间戳
    req.time = new Date();
    req.formatTime = date_tool.formatDate(req.time);
    req.formatDate = req.formatTime.split(' ')[0];
    // 输出请求的日志 - 如果使用了反向代理 此处的地址可能不是客户端的 需要修改
    console.log(`${req.connection.remoteAddress} | ${req.formatTime} | ${req.method} ${req.originalUrl} | `);
    next();
});

// 设置允许跨域请求
app.use(function (req, res, next) {
    // 添加允许跨域的请求头
    // 设置允许跨域的源为所有源
    res.setHeader('Access-Control-Allow-Origin', '*');
    // 设置允许的HTTP方法为所有方法
    res.setHeader('Access-Control-Allow-Methods', '*');
    // 设置允许的请求头为所有头
    res.setHeader('Access-Control-Allow-Headers', '*');
    // 解决预检请求
    if (req.method === 'OPTIONS') {
        res.sendStatus(200);
        return;
    }
    // 进行下一个路由的调用
    next();
});

// 服务端解析json数据的中间件
app.use(express.json());
app.use((req, res, next) => {
    req.body = req.body ? req.body : {};
    next();
});

// 挂载静态资源
app.use(express.static(path.join(__dirname, 'public')));

// 路由挂载
app.use('/login', login_router);         // 登录模块
app.use(checkCardkey);                   // token 验证中间件
app.use('/verifice', verifice_router);   // 验证模块
app.use('/create', create_router);       // 创建模块
app.use('/manager', manager_router);     // 管理模块

// 处理 404 错误
app.use(function (req, res, next) {
    res.status(404);
    res.statusMessage = '404 not found';
    res.sendFile(path.join(__dirname, '/views/error.html'));
});

module.exports = app;